package com.foo.designpattern.proxy.dynamicproxy.jdkdynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * com.foo.designpattern.proxy.dynamicproxy.jdkdynamicproxy
 * Created with IntelliJ IDEA.
 * User: wangyuxi
 * DateTime: 2016/4/1722:45
 *
 * @desc JDK动态代理
 */
public class WangPo implements InvocationHandler {
    // 目标对象
    private Object target;

    /**
     * 构造方法
     *
     * @param target 目标对象
     *               JDK动态代理只能对实现了接口的类生成代理，而不能针对类
     */
    public WangPo(Object target) {
        this.target = target;
    }


    /**
     * 执行目标对象的方法
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 执行目标对象的方法
        return method.invoke(target, args);
    }

    /**
     * 获取目标对象的代理对象
     *
     * @return 代理对象
     */
    public <T> T getProxy() {
        return (T) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
                target.getClass().getInterfaces(), this);
    }
}
